В больших приложениях поток логов может быть огромным — это перегружает хранилище и снижает производительность.
Полное отключение детальных логов — плохое решение, ведь важные данные могут потеряться. Лучше использовать выборочное логирование.
.NET теперь поддерживает несколько стратегий выборочного логирования:
• Случайная выборка по вероятности
• Выборка по трассировке
• Пользовательские сэмплеры для гибкой настройки
Пример простого пользовательского сэмплера для .NET, который ограничивает вывод логов до примерно 1 сообщения в секунду:
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter) { var key = eventId.Id.ToString();
var now = DateTime.UtcNow;
var lastTime = _lastLoggedTimes.GetOrAdd(key, DateTime.MinValue);
if ((now - lastTime) >= _interval) { _lastLoggedTimes[key] = now;
var message = formatter(state, exception); Console.WriteLine($"[{now:O}] {logLevel}: {message}"); // Здесь вместо Console.WriteLine — вызов реального логгера } else { // Пропускаем лог, чтобы не создавать слишком много записей } }
Это может снизить затраты на хранение и обработку логов без потери ключевой информации.
В больших приложениях поток логов может быть огромным — это перегружает хранилище и снижает производительность.
Полное отключение детальных логов — плохое решение, ведь важные данные могут потеряться. Лучше использовать выборочное логирование.
.NET теперь поддерживает несколько стратегий выборочного логирования:
• Случайная выборка по вероятности
• Выборка по трассировке
• Пользовательские сэмплеры для гибкой настройки
Пример простого пользовательского сэмплера для .NET, который ограничивает вывод логов до примерно 1 сообщения в секунду:
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter) { var key = eventId.Id.ToString();
var now = DateTime.UtcNow;
var lastTime = _lastLoggedTimes.GetOrAdd(key, DateTime.MinValue);
if ((now - lastTime) >= _interval) { _lastLoggedTimes[key] = now;
var message = formatter(state, exception); Console.WriteLine($"[{now:O}] {logLevel}: {message}"); // Здесь вместо Console.WriteLine — вызов реального логгера } else { // Пропускаем лог, чтобы не создавать слишком много записей } }
Это может снизить затраты на хранение и обработку логов без потери ключевой информации.
Bitcoin is a decentralized digital currency that you can buy, sell and exchange directly, without an intermediary like a bank. Bitcoin’s creator, Satoshi Nakamoto, originally described the need for “an electronic payment system based on cryptographic proof instead of trust.” Each and every Bitcoin transaction that’s ever been made exists on a public ledger accessible to everyone, making transactions hard to reverse and difficult to fake. That’s by design: Core to their decentralized nature, Bitcoins aren’t backed by the government or any issuing institution, and there’s nothing to guarantee their value besides the proof baked in the heart of the system. “The reason why it’s worth money is simply because we, as people, decided it has value—same as gold,” says Anton Mozgovoy, co-founder & CEO of digital financial service company Holyheld.
The Singapore stock market has alternated between positive and negative finishes through the last five trading days since the end of the two-day winning streak in which it had added more than a dozen points or 0.4 percent. The Straits Times Index now sits just above the 3,060-point plateau and it's likely to see a narrow trading range on Monday.